home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr53 / pctv4n_1.zip / ERROR.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-10  |  3KB  |  105 lines

  1. { LISTING 1 : ERROR.PAS }
  2. UNIT Error;
  3. INTERFACE
  4. USES
  5.   WinTypes,WinProcs,WObjects,Strings;
  6.  
  7. TYPE
  8.   ERR_Severity = (ERR_None, ERR_Information, ERR_Warning,
  9.                   ERR_Severe, ERR_Fatal );
  10. {----------------------------------------------------------------
  11.  ERR_None = Default condition
  12.  ERR_Information = No message unless specifically displayed
  13.  ERR_Warning = Message displayed when checked by object's owner
  14.  ERR_Severe = Message displayed when checked by object's owner,
  15.               or when Done
  16.  ERR_Fatal = Message displayed, THEN PostQuitMessage invoked
  17. ----------------------------------------------------------------}
  18. TYPE
  19.   pError = ^tError;
  20.   tError = OBJECT(tObject)
  21.     MessageID : Word;
  22.     Caption   : pChar;
  23.     Severity  : ERR_Severity;
  24.     Retryable : Boolean;
  25.     Displayed : Boolean;
  26.     Retry     : Boolean;
  27.     ParentWin : pWindowsObject;
  28.     Owner     : pObject;
  29.     Constructor Init(anOwner: pObject; aCaption: pChar);
  30.     Destructor Done; VIRTUAL;
  31.     PROCEDURE SetError(aMessageID: Word; aSeverity: ERR_Severity;
  32.                        aRetryable: Boolean; Caller: pObject);
  33.     FUNCTION NoError(Caller: pObject): Boolean;
  34.     PROCEDURE Display;
  35.   END;
  36. {===============================================================}
  37. IMPLEMENTATION
  38.  
  39. CONSTRUCTOR tError.Init(anOwner: pObject; aCaption: pChar);
  40. BEGIN
  41.   tObject.Init;
  42.   MessageID := 0;
  43.   IF (aCaption <> Nil) THEN Caption := StrNew(aCaption)
  44.   ELSE Caption := StrNew('Error');
  45.   Severity  := ERR_None;
  46.   Displayed := False;
  47.   ParentWin := Nil;
  48.   Owner     := anOwner;
  49. END;
  50. {---------------------------------------------------------------}
  51. DESTRUCTOR tError.Done;
  52. BEGIN
  53.   IF (Severity = ERR_Severe) THEN Display;
  54.   StrDispose(Caption);
  55.   tObject.Done
  56. END;
  57. {---------------------------------------------------------------}
  58. PROCEDURE tError.SetError(aMessageID: Word; aSeverity: ERR_Severity;
  59.                           aRetryable: Boolean; Caller: pObject);
  60. BEGIN
  61.   MessageID := aMessageID;
  62.   Severity  := aSeverity;
  63.   Retryable := aRetryable;
  64.   Displayed := False;
  65.   Retry     := False;
  66.   NoError(Caller);
  67. END;
  68. {---------------------------------------------------------------}
  69. FUNCTION tError.NoError(Caller: pObject): Boolean;
  70. BEGIN
  71.   CASE Severity OF
  72.     ERR_Warning,
  73.     ERR_Severe  : IF (Caller=Owner) THEN Display;
  74.     ERR_Fatal : BEGIN
  75.       Display;
  76.       PostQuitMessage(MessageID);
  77.     END;
  78.   END;
  79.   NoError := (Severity <= ERR_Information);
  80. END;
  81. {---------------------------------------------------------------}
  82. PROCEDURE tError.Display;
  83. VAR
  84.   Message : Array[0..512] of Char;
  85.   hWindow : tHandle;
  86.   Flags   : Word;
  87. CONST
  88.   IconFlags: Array [ERR_Severity] of Word =
  89.              (0, mb_IconInformation, mb_IconExclamation,
  90.               mb_IconStop, mb_IconStop);
  91. BEGIN
  92.   IF (NOT Displayed) THEN BEGIN
  93.     LoadString(hInstance, MessageID, Message, SizeOf (Message));
  94.     Flags := IconFlags[Severity];
  95.     IF Retryable THEN Flags := Flags OR mb_RetryCancel;
  96.     IF (ParentWin <> Nil) THEN hWindow := ParentWin^.hWindow
  97.     ELSE BEGIN
  98.       hWindow := 0;
  99.       Flags   := Flags OR mb_TaskModal;
  100.     END;
  101.     Retry := (MessageBox(hWindow,@Message,Caption,Flags)=idRetry);
  102.     Displayed := TRUE;
  103.   END;
  104. END;
  105. END.